// 自定义错误
// 当错误发生时，我们捕获到发生的错误，然后抛出定义错误
import { formatResponse } from './tool'

/**
 * 业务处理错误基类
 */
export class ServiceError extends Error {
  /**
   * @param {*} message 错误消息
   * @param {*} code 错误码
   */
  constructor(message, code) {
    super(message)
    this.code = code
  }

  // 方法
  toResponseJSON() {
    return formatResponse(this.code, this.message, null)
  }
}

// 文件上传错误 413
export const UploadError = class extends ServiceError {
  constructor(message) {
    super(message, 413)
  }
}

// 禁止访问错误
export const ForbiddenError = class extends ServiceError {
  constructor(message) {
    super(message, 401)
  }
}

// 验证错误
export const ValidationError = class extends ServiceError {
  constructor(message) {
    super(message, 406)
  }
}

// SQL错误
export const SQLError = class extends ServiceError {
  constructor(message) {
    super(message, 400)
  }
}

// 无资源错误404
export const NotFoundError = class extends ServiceError {
  constructor() {
    super('not found', 404)
  }
}

// 未知错误
export const UnknownError = class extends ServiceError {
  constructor() {
    super('server internal error', 500)
  }
}